Модуль:Shared
Таким образом, есть несколько функций, которые я использую во многих местах --Таким образом, вместо того, чтобы продолжать копировать через ту же горстку функций в каждый новый модуль --Я просто собираюсь объединить их здесь --Вот как вы это используете: -- 1. Когда вы создаете новый модуль, добавьте его вверху: -- local Shared = require( "Module:Shared" ) -- 2. Когда необходимо выполнить вызов одной из этих функций, -- просто добавте "Shared." -- Так, например, вы могли бы назвать tableCount как так: -- Shared.tableCount(data) --Это первоначально создано User:Falterfire, но... --не все эти функции мои. --Я процитировал оригинального автора, где я могу проследить его local p = {} -- итератор отсортирован по ключам -- Например, если у вас была таблица, которая выглядела примерно так -- data = {"Cat" = 5, -- "Bat" = 4, -- "Hat" = 7} -- Вы могли бы сделать -- for k, v in skpairs(data) do... -- И ваш цикл начнется с k="Bat", v=4 then go to k="Cat", v=5, -- и закончиться на k="Hat", v=7 --Первоначально зацепив Module:VoidByReward созданным User:NoBrainz function p.skpairs(t) local keys = {} for k in pairs(t) do keys+ 1 = k end table.sort(keys) local i = 0 local iterator = function() i = i + 1 local key = keysi if key then return key, tkey else return nil end end return iterator end --Циклы через все реликтовые типы --Появляется удивительное количество function p.relicLoop() local tier = "" local iterator = function() if(tier "") then tier = "Lith" elseif (tier "Lith") then tier = "Meso" elseif(tier "Meso") then tier = "Neo" elseif(tier "Neo") then tier = "Axi" else tier = nil end return tier end return iterator end function p.consoleLoop() local console = "" local iterator = function() if(console "") then console = "PC" elseif (console "PC") then console = "PS4" elseif(console "PS4") then console = "XB1" else console = nil end return console end return iterator end -- conveniently shifts BLAH to Blah -- Handy when formatting data in ALL CAPS or all lower case --Originally snagged this from Module:VoidByReward written by User:NoBrainz function p.titleCase(head, tail) if tail nil then --Split into two lines because don't want the other return from gsub local result = string.gsub(head, "(%a)(%w_'*)", p.titleCase) return result else return string.upper(head) .. string.lower(tail) end end --Returns the number of rows in a table --Originally snagged this from Module:VoidByReward written by User:NoBrainz function p.tableCount(t) local count = 0 for _ in pairs(t) do count = count + 1 end return count end --Sorts theTable based on the listed column function p.tableSort(theTable, sortCol, ascend) local new function sorter(r1, r2) if(ascend) then return r1sortCol < r2sortCol else return r1sortCol > r2sortCol end end table.sort(theTable, sorter) end --Splits a string based on a sent in separating character --For example calling splitString ("Lith V1 Relic", " ") would return {"Lith", "V1", "Relic"} function p.splitString(inputstr, sep) if sep nil then sep = "%s" end local t={} for str in string.gmatch(inputstr, "(^"..sep.."+)") do table.insert(t, str) end return t end --Возвращает 'true' если строка начинается с чего-то --Например, вызов startsWith ("Lith V1 Relic", "Lith") вернёт true function p.startsWith(string1, start) return string.sub(string1, 1, string.len(start)) start end --Скопировано и подстроено бод эту вики из Stack Overflow --Добавляет запятые function p.formatnum(number) local i, j, minus, int, fraction = tostring(number):find('(-?)(%d+)(.?%d*)') -- инвертируйте int-строку и добавьте запятую ко всем блокам из 3 цифр int = int:reverse():gsub("(%d%d%d)", "%1,") -- обратный int-строка обратно удалить необязательную запятую и положить -- опционный минус и частичная часть Назад return minus .. int:reverse():gsub("^,", "") .. fraction end function p.round(val, maxDigits, minDigits) if(val nil) then return nil else if(type(maxDigits) "table") then minDigits = maxDigits2 maxDigits = maxDigits1 end local result = val.."" local decimals = string.find(result, "%.") if(decimals ~= nil ) then decimals = string.len(result) - decimals else decimals = 0 end if(maxDigits ~= nil and decimals > maxDigits) then result = tonumber(string.format("%."..maxDigits.."f", result)) elseif(minDigits ~= nil and decimals < minDigits) then result = string.format("%."..minDigits.."f", result) end return result end end function p.contains(List, Item, IgnoreCase) if(List nil or Item nil) then return false end if(IgnoreCase nil) then IgnoreCase = false end if(type(List) "table") then for i, listI in pairs(List) do if(listI Item) then return true elseif(IgnoreCase and string.upper(listI) string.upper(Item)) then return true end end else local start = string.find(List, Item) return start ~= nil end return false end --Было слизано :) из http://lua-users.org/wiki/StringTrim --Обрезает пробелы. Не совсем уверен, как это работает. function p.trim(str) return (str:gsub("^%s*(.-)%s*$", "%1")) end return p